package cx.cs.springframework.beans.factory.support;

import cx.cs.springframework.beans.BeansException;
import cx.cs.springframework.beans.factory.config.BeanDefinition;

import java.util.HashMap;
import java.util.Map;

/*
作用：实现 Bean 定义的注册与管理。
核心功能：
内部使用 Map<String, BeanDefinition> 存储 Bean 名称与定义的映射。
registerBeanDefinition()：将 Bean 定义注册到映射表。
getBeanDefinition()：通过 Bean 名称获取对应的定义。
 */
public  class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements BeanDefinitionRegistry{

    private Map<String, BeanDefinition> beanDefinitionMap = new HashMap<String, BeanDefinition>();

    @Override
    public BeanDefinition getBeanDefinition(String name) throws BeansException {
        BeanDefinition beanDefinition = beanDefinitionMap.get(name);
        if (beanDefinition == null) throw new BeansException("no bean named"+name+"is defined");
        return beanDefinition;
    }

    @Override
    public boolean containsBeanDefinition(String beanName) {
        return beanDefinitionMap.containsKey(beanName);
    }

    @Override
    public String[] getBeanDefinitionNames() {
        return beanDefinitionMap.keySet().toArray(new String[0]);
    }

    @Override
    public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) {
        beanDefinitionMap.put(beanName, beanDefinition);
    }



}
